package LimitedTimeGame.Day_0213;

/**
 * @author zxc
 * @date 2023/02/13 20:29
 **/

import java.util.ArrayList;
import java.util.List;

/**
 * 题目 ：顺次数
 * 题目详述 ：
 * 我们定义「顺次数」为：每一位上的数字都比前一位上的数字大 1 的整数。
 * 请你返回由[low, high]范围内所有顺次数组成的 有序 列表（从小到大排序）。
 *
 * 提示：
 * 10 <= low <= high <= 10^9
 *
 */
public class SequentialDigits {
    /**
     * 思路 ：
     * ===》 由于是求取取值范围[low , high]的所有可能顺次数;（顺次数为每一位上的数字都比前一位数字大1）
     * （1）由于10 <= low <= high <= 10^9，即创建list集合去存储所有可能的顺次数
     * （由于是对于[10,10^9]取值范围的数值进行遍历，所以list集合中所存储的所有可能“顺次数”是从大到小进行排列的;）
     * （2）遍历list集合，将list集合中满足条件： value >= low && value <= high，加入到result集合中;
     * @param low
     * @param high
     * @return
     */
    public List<Integer> sequentialDigits(int low, int high) {
        List<Integer> list = new ArrayList<>();
        List<Integer> result = new ArrayList<>();
        for(int i = 2 ; i < 10 ; i++){
            for(int j = 1 ; j <= 10 - i ; j++){
                int temp = 0;
                for(int k = j ; k < j + i ; k++){
                    temp = temp * 10 + k;
                }
                list.add(temp);
            }
        }
        for (Integer value : list) {
            if(value >= low && value <= high){
                result.add(value);
            }
        }
        return result;
    }
}
